package com.woniuxy.oa.controller;

import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.woniuxy.oa.entity.GoodsRepository;
import com.woniuxy.oa.entity.Goods_claim;
import com.woniuxy.oa.entity.PageBean;
import com.woniuxy.oa.enums.ApprovalApplyType;
import com.woniuxy.oa.exception.Goods_claimException;
import com.woniuxy.oa.service.EmployeeService;
import com.woniuxy.oa.service.GoodsRepositoryService;
import com.woniuxy.oa.service.Goods_claimService;
import com.woniuxy.oa.utils.ApprovalUtil;

@Controller
public class Goods_claimController {
	@Autowired
	Goods_claimService goods_claimService;
	@Autowired
	GoodsRepositoryService goodsRepositoryService;
	@Autowired
	EmployeeService employeeService;
	
	
	
	// 查询仓库信息
//	@RequestMapping("/selectGoodsRepository")
//	public String getAllGoodsRepositorys(Model model) {
//		List<GoodsRepository> goodsRepositorys = goodsRepositoryService.getAllGoodsRepositorys();
//		model.addAttribute("goodsRepositorys", goodsRepositorys);
//		return "add";
//	}

	@RequestMapping("/addGoods_claim")
	@Transactional(rollbackFor = { RuntimeException.class, Error.class, Exception.class })
	public String addGoods_claim(Goods_claim goods_claim,Integer a_eid, Model model,HttpServletRequest request) {
		//模拟从session里获取id
		goods_claim.setId(4);
		// 查询仓库信息
		List<GoodsRepository> goodsRepositorys = goodsRepositoryService.getAllGoodsRepositorys();
		model.addAttribute("goodsRepositorys", goodsRepositorys);
		
		
		  // 回显数据
		  model.addAttribute("goods_claim", goods_claim); 
		  //验证员工id
		  //这个id是前端从session域里获取的
//		  Integer id=goods_claim.getId();
//		  Employee employee = (Employee) request.getSession().getAttribute("employee");
//		  Integer sessionid = employee.getId();
//		  if(sessionid==null) {
//		  	  model.addAttribute("msg", "没有权利添加信息");
//			  return "msg";
//		  }
//		  Integer sessionId =(Integer) sessionid;
//		  if(id != sessionId) {
//		  	  model.addAttribute("msg", "没有权利添加此人的信息");
//			  return "msg";
//		  }
		  

//		  if (id == null) { 
//			  model.addAttribute("id", "员工编号不能为空");
//			  return "add";
//		  } else if (employeeService.getEmployeeGetId(id)==null) { 
//			  model.addAttribute("id", "该员工编号不存在"); 
//			  return "add";
//		  } 
		  
		  //验证审批人的id不为空
		  if (a_eid == null) { 
			  model.addAttribute("a_eid", "审批人不能为空"); 
			  return "add";
		  }
		  
		  
		  //验证库存：先获取传过来对象的物品名称，下边用此查库存中的数量
		  String gc_name = goods_claim.getGc_name();
		  // 申领数量
		  Integer gc_number = goods_claim.getGc_number();
		  // 库存数量
		  Integer gr_number = goodsRepositoryService.getGr_numberByGr_name(gc_name);
		  if (gc_number == null) { 
			  model.addAttribute("gc_number", "数量不能为空"); 
			  return "add";
		  } else if (gr_number - gc_number < 0) {
			  model.addAttribute("gc_number", "库存不足，只剩"+gr_number+"件"); 
			  return "add";
		  } 
		  
		  //验证日期
		  String date=goods_claim.getGc_time(); 
		  if (date == null || date.equals("")) { 
			  model.addAttribute("gc_time", "日期不能为空"); 
			  return "add";
		  } 
//		  //验证状态
//		  Integer gc_status=goods_claim.getGc_status();
//		  if (gc_status == null) { 
//			  model.addAttribute("gc_status", "状态不能为空"); 
//			  return "add";
//		  } else if (goods_claim.getGc_status() != 0 && goods_claim.getGc_status() != 1) {
//			  model.addAttribute("gc_status", "审批状态只能是0或1，0代表未审批，1代表已审批");
//			  return "add";
//		  } 
		  
		try {
			System.out.println(goods_claim);
			goods_claimService.addGoods_claimGetGc_id(goods_claim);
			//获取插入申领申请表后的主键
			Integer table_key=goods_claim.getGc_id();
			System.out.println(table_key);
			//获取审批类型
			ApprovalApplyType a_type=ApprovalApplyType.APPLYGET;
			System.out.println(a_type);
			//插入审批表信息，并返回审批号(a_eid是前端传过来的审批人的id，a_type是从枚举类获取的审批类型)
			Integer a_id = ApprovalUtil.addApprovalGetId(request, a_eid, a_type);
			
			//向关系表插入申请表的主键、审批表的审批号（主键）、审批类型
			ApprovalUtil.addRelationship(table_key, a_id, a_type);
			
			System.out.println("添加成功");
			return "system/officeApply";
		} catch (Goods_claimException e) {
			System.out.println("添加失败");
			e.printStackTrace();
			model.addAttribute("msg", "系统维护中");
			return "add";
		}
	}

	// 查询全部信息
	@ResponseBody
	@RequestMapping("/select")
	public List<Goods_claim> getGoods_claims() {
		List<Goods_claim> goods_claims = goods_claimService.getGoods_claims();
		return goods_claims;

	}

	// 按条件分页查询
	@ResponseBody
	@RequestMapping("/selectGoods_claims")
	public PageBean<Goods_claim> selectGoods_claimsByConditionPage(HttpServletRequest request, String name) {
		PageBean<Goods_claim> pb = null;
		try {
			Integer pageIndex = getPageIndex(request);
			Integer pageSize = 10;
			pb = goods_claimService.getGoods_claimByPage(pageIndex, pageSize, name);
			return pb;
		} catch (Goods_claimException e) {
			e.printStackTrace();
			request.setAttribute("msg", "系统维护中");
			return pb;
		}

	}

	// 获取当前页
	private Integer getPageIndex(HttpServletRequest request) {
		if (request.getParameter("pageIndex") == null || request.getParameter("pageIndex").equals("")) {
			return 1;
		}
		return Integer.parseInt(request.getParameter("pageIndex"));
	}

	// 前端获取gc_id，根据gc_id删除
	@ResponseBody
	@RequestMapping(value="/removeGoods_claim",produces = "application/json;charset=UTF-8")
	public String removeGoods_claimByGc_id(Integer gc_id) {
		try {
			goods_claimService.removeGoods_claimByGc_id(gc_id);
			System.out.println("删除成功");
			return "delete successful";
		} catch (Goods_claimException e) {
			e.printStackTrace();
			return "删除失败！";
		}
	}

	// 根据gc_id查询申领信息和员工信息（实体类）
	@RequestMapping("/selectGoods_claimByGc_id/{gc_id}")
	public String getGoods_claimByGc_id(Model model, @PathVariable("gc_id") Integer gc_id) {
		Goods_claim goods_claim = null;
		try {
			goods_claim = goods_claimService.getGoods_claimByGc_id(gc_id);
			if(goods_claim.getGc_status()==2) {
				return "msg";
			}
			model.addAttribute("goods_claim", goods_claim);
			System.out.println(goods_claim);
			return "update";
		} catch (Goods_claimException e) {
			e.printStackTrace();
			model.addAttribute("msg", "系统维护中");
			return "update";
		}

	}

	// 根据修改信息
	@RequestMapping("/modifyGoods_claimByGc_id")
	public String modifyGoods_claimByGc_id(Goods_claim goods_claim, Model model,HttpServletRequest request) {
		
		//验证员工id
//		  Integer id=goods_claim.getId();
//		  Employee employee = (Employee) request.getSession().getAttribute("employee");
//		  Integer sessionid = employee.getId();
//		  if(sessionid==null) {
//		 	  model.addAttribute("msg", "没有权利修改信息");
//			  return "msg";
//		  }
//		  Integer sessionId =(Integer) sessionid;
//		  if(id != sessionId) {
//		      model.addAttribute("msg", "没有权利修改此信息");
//			  return "msg";
//		  }
		
		 // 回显数据
		  model.addAttribute("goods_claim", goods_claim); 

		  //验证物品名称
		  String gc_name = goods_claim.getGc_name();
		  //用姓名查询库存，如果为空说明库存没有此物品
		  Integer gr_number = goodsRepositoryService.getGr_numberByGr_name(gc_name);
		  if (gc_name == null || gc_name.trim().equals("")) { 
			  model.addAttribute("gc_name", "物品名称不能为空"); 
			  return "update";
		  }else if(gr_number == null){
			  model.addAttribute("gc_name", "库存中没有此物品");
			  return "update";
		  } 
		  
		  //验证库存：先获取传过来对象的物品名称，下边用此查库存中的数量
		  //String gc_name = goods_claim.getGc_name();
		  // 申领数量
		  Integer gc_number = goods_claim.getGc_number();
		  System.out.println(gc_number);
		  // 库存数量
		  //Integer gr_number = goodsRepositoryService.getGr_numberByGr_name(gc_name);
		  System.out.println(gr_number);
		  if (gc_number == null) { 
			  model.addAttribute("gc_number", "数量不能为空"); 
			  return "update";
		  } else if (gr_number - gc_number < 0) {
			  model.addAttribute("gc_number", "库存不足，只剩"+gr_number+"件"); 
			  return "update";
		  } 
		  
		 
		  
		  //验证日期
		  String date = goods_claim.getGc_time();
		  if (date == null || date.equals("") ) { 
			  model.addAttribute("gc_time", "日期不能为空"); 
			  return "update";
		  } 
		  //验证状态
//		  Integer gc_status=goods_claim.getGc_status();
//		  if (gc_status == null) { 
//			  model.addAttribute("gc_status", "状态不能为空"); 
//			  return "update";
//		  } else if (goods_claim.getGc_status() != 0 && goods_claim.getGc_status() != 1) {
//			  model.addAttribute("gc_status", "审批状态只能是0或1，0代表未审批，1代表已审批");
//			  return "update";
//		  } 
		try {
			System.out.println("修改qian");
			goods_claimService.modifyGoods_claimByGc_id(goods_claim);
			System.out.println("修改成功");
			return "system/officeApply";
		} catch (Goods_claimException e) {
			e.printStackTrace();
			e.printStackTrace();
			model.addAttribute("msg", "系统维护中");
			return "msg";
		}
	}
}
